\subsubsection{Contexte}
Ce travail se situe dans le contexte du contrôle de processus industriel afin d'observer et de pouvoir réagir à des évènements dans le monde réel. Une série de contrôleurs observe un environnement au travers de capteurs. Ceux-ci permettent de transformer une observation de l'environnement en données traitables par le contrôleur qui, ensuite, pourra prendre une décision quant à l'action qu'il doit entreprendre. Cette réaction du contrôleur se fait via une série d'actionneurs qui agissent sur l'environnement. Si nous prenons l'exemple d'une pièce à maintenir à une certaine température, les capteurs sont des thermomètres et les actionneurs permettent d'allumer ou d'éteindre le chauffage ou la climatisation. Les contrôleurs sont souvent des \textsl{PLC}~\footnote{\textit{Programmable Logic Controller}} qu'il est possible de programmer pour avoir le comportement désiré. \\

Il est facile de se rendre compte qu'un système de contrôle industriel est très souvent distribué. En effet, il est fréquent que les différents capteurs et actionneurs du système de contrôle ne se trouvent pas physiquement au même endroit. Dès lors, il est nécessaire d'avoir un réseau entre tous ces contrôleurs qui prennent les décisions. Un tel réseau permettrait, par exemple, à un contrôleur $A$ d'utiliser des données captées par un contrôleur $B$ pour prendre des décisions. 

\subsubsection{Le but du travail}
Pour avoir un bon système de contrôle qui réagit comme on le désire aux événements de l'environnement, il faut pouvoir programmer chacune des entités du réseau. Ceci peut se faire de deux manières différentes: (i) chaque entité est programmée indépendamment des autres, ce qui peut être fastidieux lorsqu'il y a un grand nombre d'entités, ou (ii) un programme de contrôle décrivant le comportement général du système peut être écrit et distribué sur les différentes entités, en fonction de leur tâche spécifique à effectuer. Dans le deuxième cas, il faut évidemment tenir compte de certains critères d'optimalité, telle qu'une minimisation des communications entre les sites. En effet, une communication entre deux sites peut prendre du temps et ainsi ralentir le système de contrôle. Or il est inconcevable d'avoir un système de contrôle qui ne puisse pas réagir très rapidement aux différents événements. \\

Ce problème général de la distribution a été étudié dans~\cite{BDeW} et une solution de distribution a été donnée. Cependant, que se passe-t-il lorsqu'une application a été développée et distribuée sur les différentes entités et que le programmeur désire la modifier ? Actuellement, l'entièreté de l'application est redistribuée. Il serait pourtant intéressant de pouvoir redistribuer l'application de manière efficace tout en ne modifiant pas toute la structure de distribution de l'application déjà en place. Ce sera l'objet de ce mémoire: trouver une redistribution rapide, efficace et qui tient toujours compte de la contrainte de minimisation des communications. 

\subsubsection{Le plan de travail}
Afin de bien se situer dans le contexte du travail, il faudra, tout d'abord, convenablement introduire les notions étudiées dans~\cite{BDeW}, ce mémoire étant, en quelque sorte, une suite à cette étude. Cette introduction au sujet sera développé dans les chapitres~\ref{chap-dsl} et~\ref{chap-distrib}. Ensuite, avant de donner une solution au problème de redistribution, il sera important également de définir et de modéliser correctement celui-ci: dans le chapitre~\ref{chap-redistrib}, le problème sera décrit, généralisé, modélisé et, enfin, une solution sera proposée. 